package com.ktjy.ktmall.dao.impl;

import com.ktjy.ktmall.dao.AttrValuesDao;
import com.ktjy.ktmall.dao.BaseDao;
import com.ktjy.ktmall.entity.AttrValues;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

/**
 * @version v1.0
 * @Author 郴州科泰
 * @Create 2024-07-24 - 21:30
 */
public class AttrValuesDaoImpl extends BaseDao implements AttrValuesDao {

    /**
     * 通过商品id查询t_goods_attr_values，得到商品属性值列表。
     * @param goodsId 商品id，来源的t_goods_info商品表的主键
     * @return 返回查询到的商品属性值列表
     */
    @Override
    public List<AttrValues> getAttrVals(int goodsId) {
        List<AttrValues> list = new ArrayList<>();
        // GROUP_CONCAT实现将查询到的多个attr_value_id属性值id使用逗号连接
        // 格式如： '1,2,3'
        // FIND_IN_SET(1, '1,2,3'); 查询1在'1,2,3'中是否存在，如果存在则返回1，否则返回0
        String sql = "select * from t_attr_values where FIND_IN_SET(id, (select GROUP_CONCAT(attr_value_id SEPARATOR ',') from `t_goods_attr_values` where goods_id = ?))";
        rs = super.executeQuery(sql, goodsId);
        try {
            while (rs.next()) {
                AttrValues ga = new AttrValues(rs.getInt("id"), rs.getInt("attr_id"), rs.getString("name"),rs.getString("picture"),rs.getString("desc"),rs.getInt("order_num"),rs.getInt("status"), rs.getString("create_time"), rs.getString("update_time"));
                list.add(ga);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            super.closeAll(rs,pstmt,conn);
        }
        return list;
    }

    /**
     * 通过库存sku查询t_attr_values表，得到sku的属性值列表。
     * @param stockSku 库存sku
     * @return 返回查询到的sku属性值列表
     */
    @Override
    public List<AttrValues> getSkuAttrVals(String stockSku) {
        List<AttrValues> list = new ArrayList<>();
        // `t_sku_attr_values`为sku与属性值的中间表，通过此表将当前sku的多个属性值id查询出来。
        // 再根据查询出来的属性值id到t_attr_values表查询出所对应的属性值列表
        String sql = "select * from t_attr_values where FIND_IN_SET(id, (select GROUP_CONCAT(attr_value_id SEPARATOR ',') from `t_sku_attr_values` where `stock_sku` = ?))";
        rs = super.executeQuery(sql, stockSku);
        try {
            while (rs.next()) {
                AttrValues ga = new AttrValues(rs.getInt("id"), rs.getInt("attr_id"), rs.getString("name"),rs.getString("picture"),rs.getString("desc"),rs.getInt("order_num"),rs.getInt("status"), rs.getString("create_time"), rs.getString("update_time"));
                list.add(ga);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            super.closeAll(rs,pstmt,conn);
        }
        return list;
    }
}
